/**
 * @Author:  renyc
 * @Date: 2022年12月20日16:40:24
 */

import * as Cesium from "cesium/Cesium";
import Layer from "../Layer";
import LayerType from "../LayerType";
import { SourceEventType } from "../../event/EventType";

/**
 * @class VectorLayer
 * @deprecated
 * Source : EntitySource
 */
class VectorLayer extends Layer{

    constructor(name, options){
        if(!options){
            throw new Error('VectorLayer：options无效')
        }
        if(!options.source){
            throw new Error('VectorLayer：source无效')
        }

        super(name, options);
        this._type = LayerType.VECTOR;

        //注册source的Event事件
        this._source.on(SourceEventType.FETCHED, this._onSourceFetched, this);
    }

    /**
     * 将Layer挂载到Viewer上
     * 由子类实现该函数
     * @private
     * @Override 
     * @param {Viewer} viewer 
     */
    _attach(){
        // if(this._viewer){
        //     if(this._delegate){
        //         this._viewer.dataSources.add(this._delegate);
        //     }
        // }


        // if(this._viewer&&this._source){
        //     if(this._source._delegate){
        //         this._viewer.dataSources.add(this._source._delegate);
        //     }
        // }

        if(this._viewer&&this._source){
            if(this._source._delegate){
                //source已经获取数据，直接将数据添加到Viewer上
                this._viewer.dataSources.add(this._source._delegate);
            }
            else{
                //source尚未获取数据，则source从数据源获取数据后，在attach到viewer上
                this._source.fetch();
                // let typeName = "radi:china";
                // let query = undefined;
                // //source.query(typeName, query);
                // this._source.fetch({
                //     typeName,
                //     query
                // });
            }
        }
    }

    /**
     * 将Layer从Viewer上卸载
     * 由子类实现该函数
     * @private
     * @Override 
     */
    _detach(){
        // if(this._delegate){
        //     this._delegate.then(dataSource=>{
        //         dataSource.entities.removeAll();
        //     });
        // }

        if(this._source){
            this._source.cleanup();
            this._viewer.dataSources.add(this._source._delegate);
        }
    }

    /**
     * Source获取数据后的Event响应函数
     */
    _onSourceFetched(evt){
        let json = evt.data;
        if(json){
            this._viewer.dataSources.add(evt.data);
        }
    }
}

export default VectorLayer
